﻿#ifndef FILECOMMON_H
#define FILECOMMON_H

#include <QObject>


/**
 * 文件类常用方法封装
 * @brief The FileCommon class
 */
class FileCommon : public QObject
{
    Q_OBJECT
public:
    explicit FileCommon(QObject *parent = nullptr);


public:

    /**
     * 读取文件，并返回内容
     * @brief readFile
     * @param filename
     * @param encoding
     * @return
     */
    QString readFile(const QString& filename, const QString& encoding = "UTF8");

    /**
     * 将文本内容写到文件中
     * @brief writeFile
     * @param filename 写入的文件路径
     * @param content 写入的内容
     * @param encoding 编码方式
     * @param append 是否追加到文件末尾
     * @return
     */
    void writeFile(const QString& filename, QString& content, const QString& encoding = "UTF8", const bool append = false);

    /**
     * 是否存在该文件，或者判断该文件是否为文件
     * @brief isFile
     * @param filename 文件位置
     * @return
     */
    bool isFile(const QString& filename);

    /**
     * 是否存在该文件夹，或者判断该路径是否为文件夹
     * @brief isDir
     * @param dir 文件夹路径
     * @return
     */
    static bool isDir(const QString& dir);

    /**
     * 创建目录
     * @brief createDir
     * @param dir 目录位置
     * @return
     */
    bool createDir(const QString& dir);

    /**
     * 是否存在文件或文件夹
     * @brief isExist
     * @param file  文件或文件夹路径
     * @return
     */
    bool isExist(const QString& file);

    /**
     * 删除文件
     * @brief deleteFile
     * @param filename 文件位置
     * @return
     */
    bool deleteFile(const QString& filename);

    /**
     * 删除目录
     * @brief deleteDir
     * @param dir 目录位置
     * @return
     */
    bool deleteDir(const QString& dir);

    /**
     * 移动文件
     * @brief moveFile
     * @param origin 原位置
     * @param target 目标位置
     * @return
     */
    bool moveFile(const QString& origin, const QString& target);

    /**
     * 复制文件
     * @brief copyFile
     * @param origin 原位置
     * @param target 目标位置
     * @return
     */
    bool copyFile(const QString& origin, const QString& target);


public:
    static FileCommon& INSTANCE();

signals:

};

#endif // FILECOMMON_H
